package br.uvv.sao.domain;

import java.util.List;

import javax.persistence.Column;
import javax.persistence.DiscriminatorValue;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.OneToMany;

@Entity
@DiscriminatorValue(value = "Professor")
public class Professor extends Usuario {

	private static final long serialVersionUID = 2458862603488271250L;

	@Column(name = "matricula", length = 15, nullable = true)
	private String codigo;

	@OneToMany(mappedBy = "professor", targetEntity = OfertaDisciplina.class, fetch = FetchType.LAZY)
	private List<OfertaDisciplina> ofertas;
	
	@OneToMany(mappedBy = "professor", targetEntity = Prova.class, fetch = FetchType.LAZY)
	private List<Prova> provas;
	
	@OneToMany(mappedBy = "professor", targetEntity = Questao.class, fetch = FetchType.LAZY)
	private List<Questao> questao;
	
	@OneToMany(mappedBy = "professor", targetEntity = QuestaoBase.class, fetch = FetchType.LAZY)
	private List<QuestaoBase> questaoBase;

	public Professor() {
		super();
	}

	public String getCodigo() {
		return codigo;
	}

	public void setCodigo(String codigo) {
		this.codigo = codigo;
	}

	public List<OfertaDisciplina> getOfertas() {
		return ofertas;
	}

	public void setOfertas(List<OfertaDisciplina> ofertas) {
		this.ofertas = ofertas;
	}

	public List<Prova> getProvas() {
		return provas;
	}

	public void setProvas(List<Prova> provas) {
		this.provas = provas;
	}

	public List<Questao> getQuestao() {
		return questao;
	}

	public void setQuestao(List<Questao> questao) {
		this.questao = questao;
	}

	public List<QuestaoBase> getQuestaoBase() {
		return questaoBase;
	}

	public void setQuestaoBase(List<QuestaoBase> questaoBase) {
		this.questaoBase = questaoBase;
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((codigo == null) ? 0 : codigo.hashCode());
		result = prime * result + ((ofertas == null) ? 0 : ofertas.hashCode());
		result = prime * result + ((provas == null) ? 0 : provas.hashCode());
		result = prime * result + ((questao == null) ? 0 : questao.hashCode());
		result = prime * result
				+ ((questaoBase == null) ? 0 : questaoBase.hashCode());
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Professor other = (Professor) obj;
		if (codigo == null) {
			if (other.codigo != null)
				return false;
		} else if (!codigo.equals(other.codigo))
			return false;
		if (ofertas == null) {
			if (other.ofertas != null)
				return false;
		} else if (!ofertas.equals(other.ofertas))
			return false;
		if (provas == null) {
			if (other.provas != null)
				return false;
		} else if (!provas.equals(other.provas))
			return false;
		if (questao == null) {
			if (other.questao != null)
				return false;
		} else if (!questao.equals(other.questao))
			return false;
		if (questaoBase == null) {
			if (other.questaoBase != null)
				return false;
		} else if (!questaoBase.equals(other.questaoBase))
			return false;
		return true;
	}
}
